-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fcl: 0.6.1-1 in 'rolling/distribution.yaml' [bloom] #29614
Conversation
Hi @nuclearsandwich, just a curiosity: how does this interact with the Gazebo binaries that are released on |
This pull request has been mentioned on ROS Discourse. There might be relevant details there: https://discourse.ros.org/t/release-package-requiring-custom-version-of-system-dependency/18200/7 |
Hmm based on the discussion above, maybe I shouldn't merge this. I'll wait for followups and someone else who knows more can merge. |
To add some context, this is the result of the discussion at: #27789 |
I don't want to put this discussion on hold for too long but I do want to actually examine the decisions leading up to releasing fcl in noetic so that we can either adhere to our own guidelines better in the future or spell out what makes fcl different in this case. @tfoote's comment here should be set down as review policy if it isn't already. I think there's some case to be made for "well we let it in for Noetic and so ROS 2 distributions built on Focal should be able to use the same fcl dependency in ROS Noetic and ROS Foxy and Galactic (which would be next targets after this Rolling release) and when 22.04 becomes available for which 0.6.1 is the likely upstream version as it is already part of Debian unstable we would drop the in-distribution fcl package. |
I'd like to bump this conversation since getting fcl-0.6 into Rolling is important if we're going to do a release of the RMF packages into Rolling. While the RMF packages can be compiled against either fcl-0.5 or fcl-0.6, we have come across some critical errors in fcl-0.5 where its continuous collision detection may give false negatives for known collisions. Those issues are fixed in fcl-0.6, and I think it's unlikely that we'll see the fixes backported since the code of 0.6 diverges so dramatically from 0.5. I would feel very uncomfortable releasing RMF on top of a package version that has these known issues, since the false negatives can cause permanent deadlock between robots that are trying to navigate around each other (effectively they don't "see" each other from the perspective of the planner, so they'll just keep trying to plan their paths through each other). It's true that we could pull the fcl-0.6 source code into our own codebase and statically link against it, but I expect this issue is likely to impact other users, so it would be unfortunate if the whole ecosystem had to use this approach to ensure correct continuous collision detection. To address @traversaro's concerns, I'm pretty sure there shouldn't be any linking issues since fcl-0.6 has moved everything into a template implementation. I believe a lucky byproduct of that change is that all of the symbols in fcl-0.6 will be generated with different names from fcl-0.5 even if none of the namespaces or class (now template) names get changed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "exception" of 0.5 not conflicting with 0.6 isn't good enough. Because in the future 0.6 will be packaged upstream and then we'll have conflicting versions. And if it's all moved to templates that's actually even worse. Because templates defer evaluation and you can't do things like statically link them in etc. Their headers have to be exposed to downstream compilation units. Thus it may work for Focal right now. But as soon as we look at targeting UbuntuJ on rolling this whole thing will blow up unless you actually deconflict it with things like global symbol renaming. And now we're basically looking at forking the project and then once 0.6 comes out, all users will presumably want to switch to the upstream version and change all their usages to use the non-forked and renamed symbols.
And 0.6 is on the very near horizion. fcl-0.6 has also made it into bullseye: https://packages.debian.org/bullseye/libfcl-dev as well as being in hirsute: https://packages.ubuntu.com/source/hirsute/fcl Which means that fcl 0.6 from the rosdep key will be 22.04.
It's often a hard thing to tell people, but we really can't get ahead of the distributions that we rely upon. If we want to do that we basically should be picking a more progressive base distribution.
If there really are critical errors in 0.5 these should be reported upstream and considered for a bugfix backport. Part of being in the ecosystem is that we need to participate with the other components. If upstream won't take it we could consider doing it for our deployments.
However, swinging back the other way, we're talking about releasing this into rolling which is specifically the development and testing ground distribution. And if we know that these packages are going to be based on 0.6 when Humble comes out then it's much more reasonable to add a clear loud note saying fcl-0.5 has known issues, if you want to deploy to production from rolling on focal than you should be patching your version of fcl.
Also weighing on this is that Fedora appears to be on 0.6 already as well as likely most of the rolling platforms.
Weighing all that together I don't think that we should try to release fcl on top of the system installation in the long run. In the short run, this one will definitely conflict so can't be merged as is without a refactor or isolation process.
The majority of the content is from: https://discourse.ros.org/t/release-package-requiring-custom-version-of-system-dependency/18200/6?u=tfoote Following up: #29614 (comment)
What should we do about fcl in noetic, which has already been released. Should fcl 0.6 be removed there? |
I think for Noetic it's too baked in now to remove with many packages relying on it. Luckily it might not conflict too much due to the template changes mentioned above which is probably why we haven't gotten too many user reports of issues. We also may not get reports of issues when we break other system installations. ... On more research I find that there are actually issues reported with conflicts in noetic: #26706 (comment) The resolution for that was to just tell people to use the newer version which is exactly the conflicts that we should be avoiding. There's more backstory on conflicts over here too: #26527 In general the more things that we override the tighter the box we paint ourselves into. |
@tfoote I understand the concerns you've outlined, and I can see how a strict stance on this is justified. Ordinarily I would agree with you about backporting the necessary fixes to fcl-0.5, but the truth is the change from 0.5 -> 0.6 is almost a complete rewrite, and we don't know which specific changes fixed the issues we were seeing or even what the root cause of the bug was in fcl-0.5. All we know is that our unit tests were giving false negatives in some circumstances when using fcl-0.5, while simply switching to fcl-0.6 allowed the tests to pass. Given that 0.5 isn't a version that anyone seems to want to use (..as far as I can tell, people only use it because it happens to be the version available in their distro..), I find it hard to justify the effort it would take to track down the bugs and fix them for a patch release of 0.5. I guess we'll take the approach of stashing the fcl-0.6 source code into our package that depends on it and statically linking it. Our package's API doesn't expose any FCL, so there shouldn't be any issue for downstream users. |
To clarify, I am happy with whatever solution OR reaches for this problem. My original comment was just to make sure that everyone involved was aligned w.r.t. to this problem, as in the past I had similar problem with other packages from the ros2 distribution that were shadowing the system ones (in particular On an unrelated note, I think that to avoid similar problems in the future (Ubuntu 22.04, for example) it would be nice to have a new release of fcl in 2021 with the latest bug fixes, see flexible-collision-library/fcl#532 . Not sure who is the right person to ping on this. I guess @j-rivero is the right person to get the release in Debian sid once a new release is done, but before that a new release needs to be done at the fcl level. |
Closing this PR since we're not going to release fcl into Rolling. The system version of fcl should be used by ROS packages. |
The majority of the content is from: https://discourse.ros.org/t/release-package-requiring-custom-version-of-system-dependency/18200/6?u=tfoote Following up: #29614 (comment)
* add verbiage about overriding 3rdparty content The majority of the content is from: https://discourse.ros.org/t/release-package-requiring-custom-version-of-system-dependency/18200/6?u=tfoote Following up: #29614 (comment) * Update CONTRIBUTING.md Co-authored-by: Chris Lalancette <[email protected]> * Update CONTRIBUTING.md Co-authored-by: Chris Lalancette <[email protected]> * Update CONTRIBUTING.md * Update CONTRIBUTING.md Co-authored-by: Jacob Perron <[email protected]> * Update CONTRIBUTING.md Co-authored-by: Jacob Perron <[email protected]> * Update CONTRIBUTING.md Co-authored-by: Steven! Ragnarök <[email protected]> * Update CONTRIBUTING.md Co-authored-by: Chris Lalancette <[email protected]> * Update CONTRIBUTING.md Co-authored-by: Chris Lalancette <[email protected]> * Update CONTRIBUTING.md Co-authored-by: Tully Foote <[email protected]> * Apply suggestions from code review * Update CONTRIBUTING.md * Update CONTRIBUTING.md Co-authored-by: Chris Lalancette <[email protected]> Co-authored-by: Jacob Perron <[email protected]> Co-authored-by: Steven! Ragnarök <[email protected]>
Increasing version of package(s) in repository
fcl
to0.6.1-1
:rolling/distribution.yaml
0.10.7
null